package com.jctrip.hotel.source.model.rezen.resp;

import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;
import java.util.List;

/**
 * @Author：Haruhi
 * @description:
 * @Date：2023/9/25 15:59
 * @Package：com.jctrip.hotel.source.model.rezen.resp
 * @Project：hotel-main
 */
@NoArgsConstructor
@Data
public class ProductListByCompanyIdResp implements Serializable {

    @JsonProperty("cancelRuleList")
    private List<CancelRuleListBean> cancelRuleList;
    @JsonProperty("companyId")
    private Integer companyId;
    @JsonProperty("giftList")
    private List<GiftListBean> giftList;
    @JsonProperty("restrictList")
    private List<RestrictListBean> restrictList;
    @JsonProperty("roomTypeList")
    private List<RoomTypeListBean> roomTypeList;

    @NoArgsConstructor
    @Data
    public static class CancelRuleListBean {
        @JsonProperty("cancelRuleId")
        private Long cancelRuleId;
        @JsonProperty("cancelRuleItemList")
        private List<CancelRuleItemListBean> cancelRuleItemList;
        @JsonProperty("cancelType")
        private Integer cancelType;

        @NoArgsConstructor
        @Data
        public static class CancelRuleItemListBean {
            @JsonProperty("dayValue")
            private Integer dayValue;
            @JsonProperty("percentValue")
            private Integer percentValue;
            @JsonProperty("timeValue")
            private String timeValue;
            @JsonProperty("type")
            private String type;
        }
    }

    @NoArgsConstructor
    @Data
    public static class GiftListBean {
        @JsonProperty("appointType")
        private Integer appointType;
        @JsonProperty("appointValue")
        private Integer appointValue;
        @JsonProperty("bookingPhones")
        private List<BookingPhonesBean> bookingPhones;
        @JsonProperty("freeStyleDesc")
        private String freeStyleDesc;
        @JsonProperty("giftId")
        private String giftId;
        @JsonProperty("giftName")
        private String giftName;
        @JsonProperty("imageUrlList")
        private List<String> imageUrlList;
        @JsonProperty("maxAdultNumber")
        private Integer maxAdultNumber;
        @JsonProperty("maxChildNumber")
        private Integer maxChildNumber;
        @JsonProperty("num")
        private String num;
        @JsonProperty("receptionTimes")
        private List<ReceptionTimesBean> receptionTimes;
        @JsonProperty("salePrice")
        private Integer salePrice;
        @JsonProperty("ticketAccessDesc")
        private String ticketAccessDesc;
        @JsonProperty("ticketAccessType")
        private Integer ticketAccessType;
        @JsonProperty("ticketUseSite")
        private Integer ticketUseSite;
        @JsonProperty("ticketUseSiteDesc")
        private String ticketUseSiteDesc;
        @JsonProperty("ticketValid")
        private Integer ticketValid;
        @JsonProperty("unableUseIndex")
        private String unableUseIndex;
        @JsonProperty("unableUseOtherDesc")
        private String unableUseOtherDesc;
        @JsonProperty("unit")
        private String unit;

        @NoArgsConstructor
        @Data
        public static class BookingPhonesBean {
            @JsonProperty("description")
            private String description;
            @JsonProperty("phoneNumber")
            private String phoneNumber;
        }

        @NoArgsConstructor
        @Data
        public static class ReceptionTimesBean {
            @JsonProperty("endHour")
            private String endHour;
            @JsonProperty("startHour")
            private String startHour;
        }
    }

    @NoArgsConstructor
    @Data
    public static class RestrictListBean {
        @JsonProperty("bookBeginTime")
        private String bookBeginTime;
        @JsonProperty("bookEndTime")
        private String bookEndTime;
        @JsonProperty("maxAdvanceBookDays")
        private Integer maxAdvanceBookDays;
        @JsonProperty("maxBookingRooms")
        private Integer maxBookingRooms;
        @JsonProperty("maxStayDays")
        private Integer maxStayDays;
        @JsonProperty("minAdvanceBookDays")
        private Integer minAdvanceBookDays;
        @JsonProperty("minBookingRooms")
        private Integer minBookingRooms;
        @JsonProperty("minStayDays")
        private Integer minStayDays;
        @JsonProperty("restrictRuleId")
        private Integer restrictRuleId;
    }

    @NoArgsConstructor
    @Data
    public static class RoomTypeListBean {
        @JsonProperty("bedTypeList")
        private List<BedTypeListBean> bedTypeList;
        @JsonProperty("groupId")
        private Long groupId;
        @JsonProperty("hotelCode")
        private String hotelCode;
        @JsonProperty("hotelId")
        private Long hotelId;
        @JsonProperty("imageList")
        private List<ImageListBean> imageList;
        @JsonProperty("occupancyMax")
        private Integer occupancyMax;
        @JsonProperty("productList")
        private List<ProductListBean> productList;
        @JsonProperty("roomArea")
        private String roomArea;
        @JsonProperty("roomFloors")
        private String roomFloors;
        @JsonProperty("roomtypCd")
        private String roomtypCd;
        @JsonProperty("roomtypId")
        private Long roomtypId;
        @JsonProperty("roomtypNm")
        private String roomtypNm;
        @JsonProperty("windowType")
        private Integer windowType;

        @NoArgsConstructor
        @Data
        public static class BedTypeListBean {
            @JsonProperty("bedtypCode")
            private String bedtypCode;
            @JsonProperty("bedtypId")
            private Long bedtypId;
            @JsonProperty("entityNm")
            private String entityNm;
            @JsonProperty("entityNums")
            private Integer entityNums;
            @JsonProperty("entitySize")
            private String entitySize;
        }

        @NoArgsConstructor
        @Data
        public static class ImageListBean {
            @JsonProperty("firstFlg")
            private Integer firstFlg;
            @JsonProperty("imageId")
            private Long imageId;
            @JsonProperty("imageUrl")
            private String imageUrl;
        }

        @NoArgsConstructor
        @Data
        public static class ProductListBean {
            @JsonProperty("breakfastList")
            private List<BreakfastListBean> breakfastList;
            @JsonProperty("customFlag")
            private String customFlag;
            @JsonProperty("giftList")
            private List<GiftListBean> giftList;
            @JsonProperty("hourlyRoomInfo")
            private HourlyRoomInfoBean hourlyRoomInfo;
            @JsonProperty("isHourlyRoom")
            private Integer isHourlyRoom;
            @JsonProperty("memberRankCode")
            private String memberRankCode;
            @JsonProperty("productId")
            private Long productId;
            @JsonProperty("rate")
            private RateBean rate;
            @JsonProperty("rateId")
            private Long rateId;
            @JsonProperty("reservationNotice")
            private String reservationNotice;
            @JsonProperty("roomCancelRuleList")
            private List<RoomCancelRuleListBean> roomCancelRuleList;
            @JsonProperty("roomInventoryList")
            private List<RoomInventoryListBean> roomInventoryList;
            @JsonProperty("roomPriceList")
            private List<RoomPriceListBean> roomPriceList;
            @JsonProperty("roomRestrictList")
            private List<RoomRestrictListBean> roomRestrictList;
            @JsonProperty("roomtypId")
            private Long roomtypId;
            @JsonProperty("statusFlg")
            private Integer statusFlg;

            @NoArgsConstructor
            @Data
            public static class HourlyRoomInfoBean {
                @JsonProperty("endTime")
                private String endTime;
                @JsonProperty("startTime")
                private String startTime;
                @JsonProperty("stayHour")
                private Integer stayHour;
            }

            @NoArgsConstructor
            @Data
            public static class RateBean {
                @JsonProperty("hotelCode")
                private String hotelCode;
                @JsonProperty("paymentType")
                private Integer paymentType;
            }

            @NoArgsConstructor
            @Data
            public static class BreakfastListBean {
                @JsonProperty("breakfastCnt")
                private Integer breakfastCnt;
                @JsonProperty("day")
                private String day;
            }

            @NoArgsConstructor
            @Data
            public static class GiftListBean {
                @JsonProperty("day")
                private String day;
                @JsonProperty("giftIdList")
                private List<String> giftIdList;
            }

            @NoArgsConstructor
            @Data
            public static class RoomCancelRuleListBean {
                @JsonProperty("cancelRuleId")
                private Long cancelRuleId;
                @JsonProperty("day")
                private String day;
            }

            @NoArgsConstructor
            @Data
            public static class RoomInventoryListBean {
                @JsonProperty("avaRoomCnt")
                private Integer avaRoomCnt;
                @JsonProperty("closeFlg")
                private Integer closeFlg;
                @JsonProperty("day")
                private String day;
            }

            @NoArgsConstructor
            @Data
            public static class RoomPriceListBean {
                @JsonProperty("day")
                private String day;
                @JsonProperty("price")
                private Integer price;
                @JsonProperty("promotionList")
                private List<PromotionListBean> promotionList;

                @NoArgsConstructor
                @Data
                public static class PromotionListBean {
                    @JsonProperty("promotionType")
                    private Integer promotionType;
                }
            }

            @NoArgsConstructor
            @Data
            public static class RoomRestrictListBean {
                @JsonProperty("day")
                private String day;
                @JsonProperty("restrictRuleId")
                private Long restrictRuleId;
            }
        }
    }
}
